#ifndef FIFO_TO_AMM_H_
#define FIFO_TO_AMM_H_

#define FIFO_TO_AMM_BLOCKSIZE_LOG2			10

//!	@brief				Связывает объект с аппаратным модулем.
/*!	@param	base_addr	Адрес аппаратного модуля
 */
alt_u8 fifo_to_amm_init(alt_u32 addr);

//!	@brief 				Метод позволяет сбросить аппаратный модуль
/*!	@param				Нет
 *  @return	0
 */
alt_u8 fifo_to_amm_reset();

//! @brief 				Получить номер кадра, к которому принадлежит пакет без удаления его из буфера.
/*!	@param	num			Возвращаемое значение номера кадра
 *  @return	err			Код ошибки
 */
alt_u8  fifo_to_amm_get_framenum(alt_u16* num);

//! @brief 				Получить номер кадра, к которому принадлежит пакет. Затем удаляет его из буфера.
/*!	@param 	num			Возвращаемое значение номера кадра
 *  @return	err			Код ошибки
 */
alt_u8  fifo_to_amm_get_framenum_next(alt_u16* num);

//! @brief 				Метод позволяет получить адрес начала пакета.
/*!	@param 	addr		Адрес начала пакета в байтах.
 *  @return	err			Код ошибки
 */
alt_u8 fifo_to_amm_get_addr(alt_u32* addr);


//! @brief 				Метод позволяет получить адрес начала пакета. Затем удаляет его из буфера.
/*!	@param 	addr		Адрес начала пакета в байтах.
 *  @return err			Код ошибки
 */
alt_u8 fifo_to_amm_get_addr_next(alt_u32* addr);

//! @brief 				Установка смещения до начала первого блока.
/*!	@param 	ofst		Смещение от начала памяти
 *  @return	0
 */
alt_u8 fifo_to_amm_set_fblock_ofst(alt_u32 ofst);

//! @brief 				Установка смещения до начала пакета в блоке.
/*!	@param 	ofst		Смещение внутри блока
 *  @return	0
 */
alt_u8 fifo_to_amm_set_frame_ofst(alt_u32 ofst);

//! Регистр управления
union	cmd_reg_u
{
	struct
	{
		alt_u32		cmd		:4;			//!< Команда
		alt_u32		res		:28;		//!< Резерв
	};
	alt_u32			data;
};

//! Регистр статуса модуля
union	status_reg_u
{
	struct
	{
		alt_u32		empty	:1;			//!< Буфер пуст
		alt_u32		full	:1;			//!< Буфер заполнен
		alt_u32		res		:30;		//!< Резерв
	};
	alt_u32			data;
};

//! @var	status_reg_t
//! @brief	Тип для статуса
typedef union status_reg_u 	status_reg_t;

//! @var	cmd_reg_t
//! @brief	Тип для команды
typedef union  cmd_reg_u 		cmd_reg_t;


#endif /* FIFO_TO_AMM_H_ */
